import { useCallback } from 'react'
import {
ErrorCountsChartRenderer,
NetworkTrafficRenderer,
RequestsByCountryMapRenderer,
ResponseSpeedChartRenderer,
TopApiRoutesRenderer,
TotalRequestsChartRenderer,
} from '@/components/interfaces/Reports/renderers/ApiRenderers'
import ReportFilterBar from '@/components/interfaces/Reports/ReportFilterBar'
import ReportHeader from '@/components/interfaces/Reports/ReportHeader'
import ReportPadding from '@/components/interfaces/Reports/ReportPadding'
import { REPORT_DATERANGE_HELPER_LABELS } from '@/components/interfaces/Reports/Reports.constants'
import ReportStickyNav from '@/components/interfaces/Reports/ReportStickyNav'
import ReportWidget from '@/components/interfaces/Reports/ReportWidget'
import { DatePickerValue } from '@/components/interfaces/Settings/Logs/Logs.DatePickers'
import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt'
import DefaultLayout from '@/components/layouts/DefaultLayout'
import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout'
import { ObservabilityLink } from '@/components/ui/ObservabilityLink'
import { useApiReport } from '@/data/reports/api-report-query'
import { useReportDateRange } from '@/hooks/misc/useReportDateRange'
import type { NextPageWithLayout } from '@/types'
export const ApiReport: NextPageWithLayout = () => {
const report = useApiReport()
const {
data,
error,
filters,
isLoading,
params,
mergeParams,
removeFilters,
addFilter,
refresh,
} = report
const {
datePickerHelpers,
datePickerValue,
handleDatePickerChange: handleDatePickerChangeFromHook,
showUpgradePrompt,
setShowUpgradePrompt,
} = useReportDateRange(REPORT_DATERANGE_HELPER_LABELS.LAST_60_MINUTES)
const handleDatepickerChange = useCallback(
(vals: DatePickerValue) => {
const promptShown = handleDatePickerChangeFromHook(vals)
if (!promptShown) {
mergeParams({
iso_timestamp_start: vals.from ?? '',
iso_timestamp_end: vals.to ?? '',
})
}
},
[handleDatePickerChangeFromHook, mergeParams]
)
const handleDatepickerChangeForRefresh = useCallback(
(vals: DatePickerValue) => {
handleDatePickerChangeFromHook(vals)
mergeParams({
iso_timestamp_start: vals.from ?? '',
iso_timestamp_end: vals.to ?? '',
})
handleDatepickerChange(vals)
},
[handleDatePickerChangeFromHook, mergeParams, handleDatepickerChange]
)
const refreshWithParams = useCallback(async () => {
await new Promise((resolve) => setTimeout(resolve, 0))
refresh()
}, [refresh])
const onRefreshReport = useCallback(async () => {
if (datePickerValue.isHelper && datePickerValue.text) {
const selectedHelper = datePickerHelpers.find((h) => h.text === datePickerValue.text)
if (selectedHelper) {
handleDatepickerChangeForRefresh({
from: selectedHelper.calcFrom(),
to: selectedHelper.calcTo(),
isHelper: true,
text: selectedHelper.text,
})
}
}
await refreshWithParams()
}, [datePickerValue, datePickerHelpers, handleDatepickerChangeForRefresh, refreshWithParams])
return (
}
>
)
}
ApiReport.getLayout = (page) => (
{page}
)
export default ApiReport